package com.huashi.dealer.modular.business.goods.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.huashi.dealer.commonEntity.Goods;
import com.huashi.dealer.modular.business.goods.bo.GoodsAddBo;
import com.huashi.dealer.modular.business.goods.param.StoreGoodsListParam;
import com.huashi.dealer.modular.business.goods.vo.StoreGoodsListVo;
import com.huashi.dealer.modular.business.goods.vo.StoreGoodsDetailVo;

import java.util.List;

/**
 * Store端商品服务接口
 * 对应PHP项目的/store/goods/index界面功能
 *
 * @author 谭陈强
 * @since 2025-08-07
 */
public interface StoreGoodsService {

    /**
     * 获取商品列表
     *
     * @param param 查询参数
     * @param page
     * @return 商品列表分页数据
     */
    Page<StoreGoodsListVo> getGoodsList(StoreGoodsListParam param, Page<Goods> page);

    /**
     * 获取商品详情
     *
     * @param goodsId 商品ID
     * @return 商品详情
     */
    StoreGoodsDetailVo getGoodsDetail(Long goodsId);

    /**
     * 修改商品状态（上架/下架）
     *
     * @param goodsId 商品ID
     * @param state 状态：true上架，false下架
     */
    void updateGoodsStatus(Long goodsId, Boolean state);

    /**
     * 修改商品新品状态
     *
     * @param goodsId 商品ID
     * @param state 状态：true是新品，false不是新品
     */
    void updateGoodsNewStatus(Long goodsId, Boolean state);

    /**
     * 修改商品爆款状态
     *
     * @param goodsId 商品ID
     * @param state 状态：true是爆款，false不是爆款
     */
    void updateGoodsHotStatus(Long goodsId, Boolean state);

    /**
     * 修改商品排序
     *
     * @param goodsId 商品ID
     * @param goodsSort 排序值（数字越小越靠前）
     */
    void updateGoodsSort(Long goodsId, Integer goodsSort);

    /**
     * 删除商品
     *
     * @param goodsId 商品ID
     */
    void deleteGoods(Long goodsId);

    /**
     * 批量上架
     *
     * @param goodsIds 商品ID列表
     */
    void batchUpStatus(List<Long> goodsIds);

    /**
     * 批量下架
     *
     * @param goodsIds 商品ID列表
     */
    void batchDownStatus(List<Long> goodsIds);

    /**
     * 批量删除
     *
     * @param goodsIds 商品ID列表
     */
    void batchDelete(List<Long> goodsIds);

    void add(GoodsAddBo bo);

    void update(GoodsAddBo bo);

    void updateInfo(Goods good);
}
